package JZOffer;

/**
 *剑指 Offer 25. 合并两个排序的链表
 * 输入两个递增排序的链表，
 * 合并这两个链表并使新链表中的节点仍然是递增排序的。
 ***/


/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */


//链表的基本思路一定是遍历
//两个链表——>同时遍历两个链表（基于比较大小）
class Solution25 {
    public ListNode mergeTwoLists(ListNode l1, ListNode l2) {
        //建立虚拟头节点
        ListNode dummy = new ListNode(0);
        ListNode cur = dummy;

        //基于比较，遍历两个链表
        while (l1 != null && l2 != null){
            if (l1.val < l2.val){
                cur.next = l1;//cur指向更小的
                cur = cur.next;//cur起到串联作用
                l1 = l1.next;//l1是比较的基准
            }else{
                cur.next = l2;
                cur = cur.next;
                l2 = l2.next;
            }
        }
        if (l1 != null) cur.next = l1;
        else cur.next = l2;

        return dummy.next;
    }
}
